import funcoesAuxiliares as fAux
from shutil import copy2 as copia
from os import environ, mkdir

def listaUsuarios(arquivoLeitura):
    for i in range(len(fAux.mapeiaArquivoAtual(arquivoLeitura)[0])):
        descricao = fAux.mapeiaArquivoAtual(arquivoLeitura)[4][i]
        if(not descricao):
            descricao = "nenhuma"
        print(" |Nome: {} \n |UID: {} \n |Descrição: {} \n |GID: {} (grupo {}) \n |Home: {} \n |Shell: {}".format(fAux.mapeiaArquivoAtual(arquivoLeitura)[0][i], fAux.mapeiaArquivoAtual(arquivoLeitura)[2][i], descricao, fAux.mapeiaArquivoAtual(arquivoLeitura)[3][i], fAux.pegaNomeDoGrupo(fAux.mapeiaArquivoAtual(arquivoLeitura)[3][i]), fAux.mapeiaArquivoAtual(arquivoLeitura)[5][i], fAux.mapeiaArquivoAtual(arquivoLeitura)[6][i]))

def excluirUsuario(string, arquivoLeitura, caminhoArquivoOriginal):
    # string recebe username ou UID
    # modo 0 = apagar por username | modo 2 = apagar por UID
    linhas = arquivoLeitura.readlines()
    encontrado = False

    if(string.isdigit()):
        modo = 2
    else:
        modo = 0

    salvarComo = fAux.salvarComo(caminhoArquivoOriginal)

    with open(salvarComo, 'w') as arq:
        for linha in linhas:
            if(linha.rsplit(":")[modo] != string):
                arq.write(linha)
            else:
                print("Removendo o {} de UID {}...".format(linha.rsplit(":")[0], linha.rsplit(":")[2]))
                fAux.atualizaShadow(linha.rsplit[0], 0, "remover")
                encontrado = True

    if(not encontrado):
        print("Não foi possível realizar a exclusão, o usuário não existe.")

def criaUsuario(arquivoLeitura, caminhoArquivoOriginal):
    dados = fAux.exibeFormulario(arquivoLeitura)
    salvarComo = fAux.salvarComo(caminhoArquivoOriginal)
    
    if(salvarComo != caminhoArquivoOriginal):
        copia(caminhoArquivoOriginal, salvarComo)
    arquivoAppend = open(salvarComo, 'a')

    fAux.geraShadow(dados[0], dados[1])
    arquivoAppend.write("{}:x:{}:{}:{}:{}:{}\n".format(dados[0], dados[2], dados[3], dados[4], dados[5], dados[6]))
    
    if(input("Deseja criar o diretório home? ").upper().find("S") != -1):
        try:
            mkdir(dados[5])
        except PermissionError:
            print("NÃO FOI POSSÍVEL CRIAR {}: Privilégios root necessários".format(dados[5]))
        except FileExistsError:
            print("{} já existe".format(dados[5]))

def editaUsuario(string, arquivoLeitura, caminhoArquivoOriginal):
    # string recebe username ou UID
    # modo 0 = apagar por username | modo 2 = apagar por UID
    linhas = arquivoLeitura.readlines()
    encontrado = False

    if(string.isdigit()):
        modo = 2
    else:
        modo = 0

    dados = fAux.exibeFormulario(arquivoLeitura)
    salvarComo = fAux.salvarComo(caminhoArquivoOriginal)
    fAux.atualizaShadow(dados[0], dados[1], "editar")

    with open(salvarComo, 'w') as arq:
        for linha in linhas:
            if(linha.rsplit(":")[modo] != string):
                arq.write(linha)
            else:
                arq.write("{}:x:{}:{}:{}:{}:{}\n".format(dados[0], dados[2], dados[3], dados[4], dados[5], dados[6]))
                print("Concluído")
                encontrado = True

    if(not encontrado):
        print("Não foi possível realizar a edição, o usuário não existe.")
